#ifndef UTILS_H_INCLUDED
#define UTILS_H_INCLUDED
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <math.h>
#include "BMP_struct.h"

#define BYTE 8

typedef struct nobyte{
	unsigned char byte; //conteudo
	short int last; //proximo bit a ser lido, quando esse contador der 8 dropa esse nó
	struct nobyte *next;
}NoByte;

typedef struct{
	NoByte *start, *end;
}ByteSequence;

typedef struct strctHuff{ //vetor com os codigos huffman lidos do arquivo comprimido
	short int codeHuffTam;	//tamanho em bits do codigo huffman
	short int codeHuff;	//codigo huffman em inteiro
	char* codeHuffString; //string do codigo huffman correspondente
	short int	tamanho; //tamanho correspondente ao numero de bits
}HuffmanCodes;

int bitValue(char, int); //pega valor de um bit em um byte
//char* intToChar(int, int); //retorna um char de um numero inteiro (em binario)
//NoByte* getStart(ByteSequence*); //retorna inicio da sequencia de bytes
void push(ByteSequence*, NoByte*); //insere um byte na estrutura
int getNextBitValue(ByteSequence*); //retorna o proximo bit a ser lido na lista
void initB(ByteSequence*);	//inicializa a estrutura
int isEmptyU(ByteSequence*);
char* intToString(unsigned char, int);
char stringBinToByte(const char*);


#endif
